package UT01.actividad6;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;



public class Eje14 {

	static void imprimir(ArrayList<Libro> b) {
		for (Libro libro : b) {
			System.out.println("Titulo: " + libro.getTitulo());
			System.out.println("autor: " + libro.getAutor());
			System.out.println("ISBN: " + libro.getISBN());
			System.out.println("editorial: " + libro.getEditorial());
			System.out.println("a�o: " + libro.getAgno());
		}
	}

	static void AgnadirLibro(ArrayList<Libro> b) {

		String titulo;
		String autor;
		String ISBN;
		String editorial;
		int agno;
		Scanner sc = new Scanner(System.in);

		System.out.println("Introduzca el titulo del libro");
		titulo = sc.next();
		System.out.println("Introduzca el autor del libro");
		autor = sc.next();
		System.out.println("Introduzca el ISBN del libro");
		ISBN = sc.next();
		System.out.println("Introduzca la editorial del libro");
		editorial = sc.next();
		System.out.println("Introduzca el a�o del libro");
		agno = sc.nextInt();

		b.add(new Libro(titulo, autor, ISBN, editorial, agno));

	}

	static void guardarLibros(ArrayList<Libro> lista) {
		String nomFich = "D:\\BIBLIO.BIN";
		/*
		 * Scanner sc = new Scanner(System.in);
		 * System.out.println("Introduzca el nombre del fichero"); nomFich =
		 * sc.next();
		 */
		ObjectOutputStream dataOS = null;

		try {
			// Conecto el flujo de bytes al flujo de datos
			dataOS = new ObjectOutputStream(new FileOutputStream(new File(
					nomFich)));
			for (Libro libro : lista) { // recorremos los arrays)
				dataOS.writeObject(libro); // escribo restaurante en el fichero
			}
			dataOS.close(); // cerrar stream de salida
		} catch (FileNotFoundException fnfe) {
			System.out.println("El fichero " + nomFich + " no se encuentra");
		} catch (IOException ioe) {
			System.out.println("Error de E/S");
		}

	}

	static void cargarLibros(ArrayList<Libro> biblioteca) {
		String nomFich = "D:\\BIBLIO.BIN";

		File fichero = new File(nomFich);
		/*
		 * Scanner sc = new Scanner(System.in); do{
		 * System.out.println("Introduzca el nombre del fichero"); nomFich =
		 * sc.next(); fichero = new File(nomFich); } while (!fichero.exists());
		 */

		Libro libro;
		ObjectInputStream ois;

		try {
			ois = new ObjectInputStream(new FileInputStream(fichero));
			try {
				libro = (Libro) ois.readObject();
			
				while (libro != null) {
					biblioteca.add(libro);
					libro = (Libro) ois.readObject();
					
				}
			} catch (EOFException eo) {
			}
			ois.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int opcion = 0;
		Scanner s = new Scanner(System.in);
		ArrayList<Libro> biblioteca = new ArrayList<Libro>();

		/*
		biblioteca.add(new Libro("El se�or de los anillos", "J.R.R. Tolkien",
				"978-3-16-148410-0", "Minotauro", 2012));
		biblioteca.add(new Libro("El Hobbit", "J.R.R. Tolkien",
				"978-3-16-148410-0", "Minotauro", 2012));
		 */
		while (opcion != 5) {
			System.out.println("Seleccion una opci�n");
			System.out.println("1. A�adir Libro");
			System.out.println("2. Mostrar biblioteca");
			System.out.println("3. Guardar biblioteca");
			System.out.println("4. Cargar biblioteca");
			System.out.println("5. Salir");
			opcion = s.nextInt();
			switch (opcion) {
			case 1:
				AgnadirLibro(biblioteca);
				break;
			case 2:
				imprimir(biblioteca);
				break;
			case 3:
				guardarLibros(biblioteca);
				break;
			case 4:
				cargarLibros(biblioteca);
				break;

			}
		}

	}

}
